<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;
use think\Session;
use think\Db;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
use Myredis\Myredis;

class Admincontroller extends Controller
{
    /**
     * 判断是否是登录的状态
     */
    public function  _initialize()
    {
        if(empty(session('admin'))){
            return  $this->redirect(url('admin/login/index'));
        }else{
            // $atoken = session('admin')['token'];
            // $rtoken = MyRedis::get(session('admin')['id'].'admintoken');
            // if($atoken != $rtoken){
            //     Session::delete('admin');
            //     return $this->error('账号强制下线','admin/login/index');
            // }
            // 判断当前登录的用户是否有权限进去该控制器和方法
            $name = session('admin')['name'];
            $data = Db::name('xo_admin_users')
                ->alias('u')
                ->where('u.name',$name)
                ->field('p.controller,p.method,r.name')
                ->join('xo_admin_users_role ur','ur.uid=u.id')
                ->join('xo_admin_role r','ur.rid=r.id')
                ->join('xo_admin_role_pp rp','r.id=rp.rid')
                ->join('xo_admin_pp p','p.id=rp.pid')
                ->select();
            // var_dump($name,$data);die;

            $request = Request::instance();
            $c = strtolower($request->controller());
            $a = strtolower($request->action());

            //判断用户是不是 root  若是则不用判断权限
            //若不是则进行权限判断
            if (!in_array('root',$data['0'])) {
                // 开关 mark  若为 null 则权限不够  若权限够则为 true
                $mark =null;
                for ($i=0; $i < count($data); $i++) {
                    if (($data[$i]['controller'] == $c) && ($data[$i]['method'] == $a)) {
                        $mark = true;
                        // return $this->rd('admin/'.$c.'/'.$c);
                    }
                }

                // 若mark不是true 说明用户访问的页面权限不够
                if (!$mark) {
                    return $this->error('当前你的权限无法访问该页面~去升升级再来吧~~','/admin');
                }

            }
        }
    }


    public function _empty(Request $request)
    {
        $a = $request->action();
        return '您当前访问的[' . $a . ']操作, 被小怪兽吃了';
    }


    public function upload($name)
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        // 多维数组的重组

        $_FILES['myfile']=$_FILES['myfile'];
            //unset($_FILES['icon']);


            $myfile = 'myfile';

            $count = count($_FILES[$myfile]['name']);
            for ($i = 0; $i < $count; $i++) {
                foreach ($_FILES[$myfile] as $key => $val) {
                    $_FILES[$myfile.$i][$key] = $val[$i];
                }
            }



            // var_dump($_FILES);die;
            // 删除旧的上传信息
            unset($_FILES[$myfile]);

            // 生成变量 动态调用函数
            $myfile = 'myfile';
            $size = 10485760;
            $type = ['image'];
            $dir = './uploads/';
            // var_dump($_FILES);die;
            foreach ($_FILES as $key => $val) {
                // 此处要用 数组接收的返回值,否则 后者会覆盖前者
                $upInfo[] = $this->upfile($key, $size, $type, $dir);
            }

            foreach ($_FILES as $k => $v) {
                // 此处要用 数组接收的返回值,否则 后者会覆盖前者
                $list[]=$v['size'];
            }


            // 储存到数据库中
            foreach ($upInfo as $ks => $vs) {
                // 上传7牛云
                // 需要填写你的 Access Key 和 Secret Key
                $accessKey = "N3GnH7a9EyWyUMRdA2wlvUTgwqQjEldvqP_ODRDv";// 7牛云的 Access Key
                $secretKey = "Ea7tLc1QI1AeN3pKV5ZTWNzqwNgH0zepNAF0xl5L";//7牛云的 Secret Key
                $bucket = "yuntu";    ////7牛云的 bucket 库名
                // 构建鉴权对象
                $auth = new Auth($accessKey, $secretKey);
                // 生成上传 Token
                $token = $auth->uploadToken($bucket);
                // 要上传文件的本地路径
                $filePath = './static/Upload/' . date('Y/m/d/') . $vs;
                // 上传到七牛后保存的文件名
                $key = $vs;
                // 初始化 UploadManager 对象并进行文件的上传。
                $uploadMgr = new UploadManager();
                // 调用 UploadManager 的 putFile 方法进行文件的上传。
                list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
                // echo "\n====> putFile result: \n";
                // if ($err !== null) {
                // var_dump($err);
                // } else {
                // var_dump($ret['key']);
                // }

                // $ret 返回2个参数  hash 和 key    key对应的是图片的名字(即下载地址[key])
            //得到第一个.的位置
                $index = stripos($vs, '.');

                $p['ext'] = substr($vs, $index + 1);
                $time = time();
                $p['icon'] = $ret['key'];
                $p['name'] = $name;
                $p['status'] = '2';
                $p['addtime'] = $time;
            //$p['size'] = $list[$ks];
            // 将上传到7牛云的图片地址存入数据库中
            $result = Db::table('xo_admin_banner')->insert($p);
            //$id=Db::table('xo_user')->field('id')->where(['nickname'=>$name])->find();
            //$info['gid']=$result;
            //$info['uid']=$id['id'];
            //$list=Db::table('xo_user_goods')->insert($info);
            }
            // var_dump($upInfo);die;
            if ($result){
            // 提交事务
            Db::commit();
            return $this->success('上传成功~');
            }else{
            // 事务回滚
            Db::rollback();
            }
    }

    function upfile($myfile = 'myfile', $size = 10485760, $type = ['image', 'text'], $dir = './uploads/')
    {
        //开启事务
        Db::startTrans();
        // 进行相关的业务逻辑操作
        if (empty($_FILES)) {
            return $this->error('可能设置错误<br> 请检查表单设置 或 php.ini的post设置');
        }

        // 获取上传信息
        $fileError = $_FILES[$myfile]['error'];
        $fileSize = $_FILES[$myfile]['size'];
        $fileType = $_FILES[$myfile]['type'];
        $fileName = $_FILES[$myfile]['name'];
        $fileTmp = $_FILES[$myfile]['tmp_name'];

        // 判断是否错误发生
        if ($fileError > 0) {
            // 提示信息
            echo '文件上传出错<br>';

            // 错误信息提示
            switch ($fileError) {
                case 1:
                    echo '上传的文件 超过了 php.ini 中 upload_max_filesize 选项限制的值';
                    break;
                case 2:
                    echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项限制的';
                    break;
                case 3:
                    echo '文件只有一部分被上传';
                    break;
                case 4:
                    echo '没有文件被上传';
                    break;
                case 6:
                    echo '找不到临时文件夹';
                    break;
                case 7:
                    echo '文件写入失败';
                    break;
            }

            // 一旦出错,再次中止
            return $this->error('即将跳转到上一层');
        }

        // 自由限制文件大小   上传文件的大小 > 调用大小值
        if ($fileSize > $size) {
            return $this->error('文件超过限制大小');
        }

        // 做文件类型的限制
        // 先的到上传文件的主类型
        // print_r(explode('/',  $fileType));
        list($mainType) = explode('/',  $fileType);

        // echo $mainType;

        // 在调用的类型列表之中 搜索类型,进行匹配
        if (! in_array($mainType, $type)) {
            return $this->error('文件类型不合法');;
        }

        // 生成保存的文件
        // 先获取源文件的后缀
        $ext = pathinfo($fileName, PATHINFO_EXTENSION);
        // var_dump($ext);

        // 生成新的文件名: 时间+唯一ID+后缀
        $saveName = date('Ymd') . uniqid() . '.' . $ext;
        // echo $saveName;

        // 保存路径
        // echo date('Y/m/d');
        $savePath = './static/Upload/'.date('Y/m/d/');
        // echo $savePath;
        // 检测目录是否存在,不存在则建之
        if (!file_exists($savePath)) {
            mkdir($savePath, 0777, true);
        }
        // 拼接路径 +  文件名
        $saveFile = $savePath . $saveName;
        // echo $saveFile;

        // exit;
        // 移动文件
        if (move_uploaded_file($fileTmp, $saveFile)){
            // 提交事务
            Db::commit();
            return $saveName;
        }else{
            // 事务回滚
            Db::rollback();
        }
    }



    // public function up($aid)
    // {
    //     //开启事务
    //     Db::startTrans();
    //     // 进行相关的业务逻辑操作
    //     // 多维数组的重组

    //     $_FILES['myfile']=$_FILES['myfile'];



    //     $myfile = 'myfile';

    //     $count = count($_FILES[$myfile]['name']);
    //     for ($i = 0; $i < $count; $i++) {
    //         foreach ($_FILES[$myfile] as $key => $val) {
    //             $_FILES[$myfile.$i][$key] = $val[$i];
    //         }
    //     }

    //     // var_dump($_FILES);die;
    //     // 删除旧的上传信息
    //     unset($_FILES[$myfile]);

    //     // 生成变量 动态调用函数
    //     $myfile = 'myfile';
    //     $size = 10485760;
    //     $type = ['image'];
    //     $dir = './uploads/';
    //     // var_dump($_FILES);die;
    //     foreach ($_FILES as $key => $val) {
    //         // 此处要用 数组接收的返回值,否则 后者会覆盖前者
    //         $upInfo[] = $this->upfile($key, $size, $type, $dir);
    //     }

    //     foreach ($_FILES as $k => $v) {
    //         // 此处要用 数组接收的返回值,否则 后者会覆盖前者
    //         $list[]=$v['size'];
    //     }


    //     // 储存到数据库中
    //     foreach ($upInfo as $ks => $vs) {
    //         // 上传7牛云
    //         // 需要填写你的 Access Key 和 Secret Key
    //         $accessKey = "N3GnH7a9EyWyUMRdA2wlvUTgwqQjEldvqP_ODRDv";// 7牛云的 Access Key
    //         $secretKey = "Ea7tLc1QI1AeN3pKV5ZTWNzqwNgH0zepNAF0xl5L";//7牛云的 Secret Key
    //         $bucket = "yuntu";    ////7牛云的 bucket 库名
    //         // 构建鉴权对象
    //         $auth = new Auth($accessKey, $secretKey);
    //         // 生成上传 Token
    //         $token = $auth->uploadToken($bucket);
    //         // 要上传文件的本地路径
    //         $filePath = './static/Upload/' . date('Y/m/d/') . $vs;
    //         // 上传到七牛后保存的文件名
    //         $key = $vs;
    //         // 初始化 UploadManager 对象并进行文件的上传。
    //         $uploadMgr = new UploadManager();
    //         // 调用 UploadManager 的 putFile 方法进行文件的上传。
    //         list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
    //         // echo "\n====> putFile result: \n";
    //         // if ($err !== null) {
    //         // var_dump($err);
    //         // } else {
    //         // var_dump($ret['key']);
    //         // }

    //         // $ret 返回2个参数  hash 和 key    key对应的是图片的名字(即下载地址[key])   得到第一个.的位置
    //         $index = stripos($vs, '.');

    //         $p['id'] = '';
    //         $p['aid'] = $aid;
    //         $p['icon'] = $ret['key'];
    //         $p['face'] = 0;
    //         // 将上传到7牛云的图片地址存入数据库中
    //         $result = Db::table('xo_advertisement')->insert($p);

    //     }
    //     // var_dump($upInfo);die;
    //     if ($result){
    //         // 提交事务
    //         Db::commit();
    //         return $this->success('上传成功~');
    //     }else{
    //         // 事务回滚
    //         Db::rollback();
    //     }
    // }

}
